package la.iok.hzsvn.lewin.movie.operation.service;

import la.iok.hzsvn.lewin.movie.operation.entity.Wallet;
import la.iok.hzsvn.lewin.mybatis.service.BaseService;
import la.iok.hzsvn.share.annotations.Nullable;

public interface WalletService extends BaseService<Wallet, Long> {
    /**
     * 充值
     * @param userId 用户id.必须是有效值,方法内没有验证用户是否存在
     * @param amount 充值金额,单位为分
     */
    void charge(@Nullable Long userId, @Nullable Integer amount);

    /**
     * 消费
     * @return 受影响的记录数,应该为1
     */
    int cost(@Nullable Long userId, @Nullable Integer amount, @Nullable Long version);

    /**
     * 查询用户钱包余额.如果用户id不为空,并且钱包未找到,则创建一个余额为0的钱包
     * @param userId 用户id
     * @return 余额账号
     */
    @Nullable
    Wallet wallet(@Nullable Long userId);
}
